using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using TestKontrole2;

namespace MvcTestKontrole.Controllers {
    public class TestKontroleController : Controller {
        string VD_SVI_KLIJENTI = "klijenti";
        string VD_REV_CIKLUS = "revCiklus";
        string VD_STANJA_UZA = "stanja";
        string PARAM_PODUZECE = "poduzece";
        string PARAM_DATUM = "datum";
        string PARAM_OPIS_CILJA = "cilj";
        string PARAM_OPIS_POPUL = "opisPop";
        string PARAM_UVJET_POPULACIJE = "populacija";
        string PARAM_OPIS_JEDINICE = "jedinica";

        string PARAM_OPIS_KONTROLA = "k0k";
        string PARAM_KONT_RIZIK = "k1k";
        string PARAM_DOP_STO_DEV = "k2k";
        string PARAM_OCE_STO_DEV = "k3k";
        string PARAM_REV_CIK = "revCik";

        //
        // GET: /TestKontrole/

        public ActionResult Index() {
            return View();
        }
        //
        // GET: /TestKontrole/Details

        public ActionResult Details() {
            return View();
        }

        ////
        //// GET: /TestKontrole/Details/5

        //public ActionResult Details(int id)
        //{
        //    return View();
        //}

        //
        // GET: /TestKontrole/Create

        public ActionResult Create() {
            KlijentRepository kr = KlijentRepository.getInstanca();
            var typeList = new SelectList(kr.getAllKlijent().ToList(), "Naziv", "Naziv");
            ViewData[VD_SVI_KLIJENTI] = typeList;
            return View();
        }

        //
        // POST: /TestKontrole/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(FormCollection collection) {
            try {
                KlijentRepository kr = KlijentRepository.getInstanca();
                string kna = collection[PARAM_PODUZECE];
                Klijent klijent = kr.getKlijentByNaziv(kna);

                string cilj = collection[PARAM_OPIS_CILJA];
                /// Provjeriti je li datum!!!
                string datum = collection[PARAM_DATUM];
                DateTime datum2 = DateTime.Parse(datum);
                //// Ovo se nece trebati raditi kad se stave datapickeri
                string opisJed = collection[PARAM_OPIS_JEDINICE];
                string opisPop = collection[PARAM_OPIS_POPUL];

                /// Provjeriti je li ok izraz
                string izraz = collection[PARAM_UVJET_POPULACIJE];
                //// Ovo se nece trebati raditi kad se stave datapickeri

                Uvjet uPop = new Uvjet(izraz, TipUvjeta.byDatum);
                Populacija pop = new Populacija(uPop, opisPop);

                List<Kontrola> lstKont = new List<Kontrola>();


                List<int> prodjeneKontrole = new List<int>();
                string[] kljucevi = collection.AllKeys;
                for (int i = 0; i < kljucevi.Length; i++) {
                    if (kljucevi[i].StartsWith(PARAM_OPIS_KONTROLA)) {
                        int brojKontrole = Int32.Parse(kljucevi[i].Substring(3));
                        if (!prodjeneKontrole.Contains(brojKontrole)) {
                            string opisKontrole = collection[PARAM_OPIS_KONTROLA + brojKontrole.ToString()];
                            string kontRizik = collection[PARAM_KONT_RIZIK + brojKontrole.ToString()];
                            string dopStoDev = collection[PARAM_DOP_STO_DEV + brojKontrole.ToString()];
                            string oceStoDev = collection[PARAM_OCE_STO_DEV + brojKontrole.ToString()];
                            Kontrola kontrola = new Kontrola(opisKontrole, pop.getVelicinaSkupa(), pripremi(kontRizik), pripremi(dopStoDev),
                                pripremi(oceStoDev));
                            lstKont.Add(kontrola);
                            prodjeneKontrole.Add(brojKontrole);
                        } else
                            continue;
                    } else
                        continue;
                }
                RevizijskiCiklus revCik = new RevizijskiCiklus(klijent, cilj, opisJed, datum2, pop, lstKont);
                RevizorskiCiklusRepository revCikRep = RevizorskiCiklusRepository.getInstanca();
                string naziv = revCikRep.addRevizijskiCiklus(revCik);
                return RedirectToAction("Count", new { naziv = naziv });
            } catch {
                KlijentRepository kr = KlijentRepository.getInstanca();
                var typeList = new SelectList(kr.getAllKlijent().ToList(), "Naziv", "Naziv");
                ViewData["poduzece"] = typeList;
                return View();
            }
        }

        private float pripremi(string brUStr) {
            float broj = float.Parse(brUStr);
            return broj / 100F;
        }
        //
        // GET: /TestKontrole/Edit/5

        public ActionResult Count(string naziv) {
            RevizorskiCiklusRepository rcr = RevizorskiCiklusRepository.getInstanca();
            RevizijskiCiklus revCik = rcr.getRevizijskiCiklusByNaziv(naziv);
            ViewData[VD_REV_CIKLUS] = revCik;
            return View(revCik);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Samples(FormCollection form) {
            string naziv = form[PARAM_REV_CIK];
            RevizorskiCiklusRepository rcr = RevizorskiCiklusRepository.getInstanca();
            RevizijskiCiklus revCik = rcr.getRevizijskiCiklusByNaziv(naziv);
            ViewData[VD_REV_CIKLUS] = revCik;
            List<ObiljezjeIspravnostiElementa> lista = new List<ObiljezjeIspravnostiElementa>();
            lista.Add(ObiljezjeIspravnostiElementa.neocijenjen);
            lista.Add(ObiljezjeIspravnostiElementa.ispravan);
            lista.Add(ObiljezjeIspravnostiElementa.neispravan);
            lista.Add(ObiljezjeIspravnostiElementa.neodgovarajuci);
            var typeList = new SelectList(lista);
            ViewData[VD_STANJA_UZA] = typeList;
            return View(revCik);
        }


        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Finish(FormCollection form) {
            string naziv = form[PARAM_REV_CIK];
            RevizorskiCiklusRepository rcr = RevizorskiCiklusRepository.getInstanca();
            RevizijskiCiklus revCik = rcr.getRevizijskiCiklusByNaziv(naziv);
            ViewData[VD_REV_CIKLUS] = revCik;
            return View(revCik);
        }


        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult TheEnd(FormCollection form) {
            return View();
        }
        //
        // GET: /TestKontrole/Edit/5

        public ActionResult Edit(int id) {
            return View();
        }

        //
        // POST: /TestKontrole/Edit/5

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection collection) {
            try {
                // TODO: Add update logic here

                return RedirectToAction("Index");
            } catch {
                return View();
            }
        }
    }
}
